﻿using Model;
using Model.Auxiliar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace BLL
{
    public class Mensagens_BLL
    {
        #region singleton
        private static Mensagens_BLL instance;

        private Mensagens_BLL() { }

        public static Mensagens_BLL Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Mensagens_BLL();
                }
                return instance;
            }
        }
        #endregion

        public List<hrp_mensagens> obterMensagens(int id_user, bool status)
        {
            hrpEntities hrp = new hrpEntities();
            var list = from msg in hrp.hrp_mensagens
                        join users in hrp.hrp_users on msg.user_enviaid equals users.id
                       where msg.user_recebeid == id_user && msg.status == status
                       orderby msg.data_create descending
                        select msg;          
            return list.ToList();
        }

        public List<hrp_mensagens> obterMensagensEnviadas(int id_user)
        {
            hrpEntities hrp = new hrpEntities();
            var list = from msg in hrp.hrp_mensagens
                       join users in hrp.hrp_users on msg.user_enviaid equals users.id
                       where msg.user_enviaid == id_user 
                       orderby msg.data_create descending
                       select msg;
            return list.ToList();
        }

        public List<hrp_mensagens> obterTodasMensagens(int id_user)
        {
            hrpEntities hrp = new hrpEntities();
            var list = from msg in hrp.hrp_mensagens
                       join users in hrp.hrp_users on msg.user_enviaid equals users.id
                       where msg.user_recebeid == id_user orderby msg.data_create descending
                       select msg;
            return list.ToList();
        }

        public hrp_mensagens obterMensagensporID(int id_user, int idmsg)
        {
            hrpEntities hrp = new hrpEntities();
            var list = from msg in hrp.hrp_mensagens
                       join users in hrp.hrp_users on msg.user_enviaid equals users.id
                       where msg.user_recebeid == id_user && msg.id==idmsg                       
                       select msg;
            return list.FirstOrDefault();
        }

        public hrp_mensagens obterMensagensEnviadasporID(int id_user, int idmsg)
        {
            hrpEntities hrp = new hrpEntities();
            var list = from msg in hrp.hrp_mensagens
                       join users in hrp.hrp_users on msg.user_enviaid equals users.id
                       where msg.user_enviaid == id_user && msg.id == idmsg
                       select msg;
            return list.FirstOrDefault();
        }

        public void ApagarMensagem(int idmsg)
        {
            hrpEntities hrp = new hrpEntities();
            hrp_mensagens msg = hrp.hrp_mensagens.FirstOrDefault(m=>m.id==idmsg);
            hrp.hrp_mensagens.Remove(msg);
            hrp.SaveChanges();
        }

        public bool changeMsgStatus(int idmsg) {
            hrpEntities hrp = new hrpEntities();
            var msg = hrp.hrp_mensagens.FirstOrDefault(c => c.id == idmsg);
            msg.status = true;
            hrp.SaveChanges();
            return true;
        }

        public List<hrp_users> obteruserEnviarMail(int idcliente)
        {
            hrpEntities hrp = new hrpEntities();
            var users = from user in hrp.hrp_users
                        where user.idClient == idcliente && user.active == true
                        select user;
            return users.ToList();
        }


        public void enviarMsg(int id_quemenvia, string nome_quem_envia, int id_quem_Recebe, string nome_quem_recebe, string assunto, string mensagem, int idclient)
        {
            try
            {
            hrpEntities hrp = new hrpEntities();
            hrp_mensagens msg = new hrp_mensagens();
            msg.assunto = assunto;
            msg.data_create = DateTime.Now;
            msg.enviar_email = false;
            msg.mensagem = mensagem;
            msg.nome_envia = nome_quem_envia;
            msg.nome_recebe = nome_quem_recebe;
            msg.status = false;
            msg.user_enviaid = id_quemenvia;
            msg.user_recebeid = id_quem_Recebe;
            hrp.hrp_mensagens.Add(msg);
            hrp.SaveChanges();            
            }
            catch (Exception)
            {                
                throw;
            }
            
        }

    }
}
